home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.3 Development Libraries / SGI IRIX 6.3 Development Libraries.iso / dist / dist6.3 / ViewKit_dev.idb / usr / include / Vk / VkMsgFacility.h.z / VkMsgFacility.h
C/C++ Source or Header  |  1996-09-20  |  5KB  |  152 lines

  1. #ifndef VK_MSG_FACILITY
  2. #define VK_MSG_FACILITY
  3.  
  4. #include <X11/Intrinsic.h>
  5. #include "VkMsg.h"
  6.  
  7. #define DEFAULT_SYNC_TIMEOUT    -1
  8.  
  9. class VkMsgFacility;
  10.  
  11. extern VkMsgFacility *theMessageFacility;
  12.  
  13. enum VkMsgFacilityReason { VK_MSG_FACILITY_NOTICE, VK_MSG_FACILITY_REQUEST,
  14.                VK_MSG_FACILITY_REQUEST_SPECIFIC,
  15.                VK_MSG_FACILITY_REPLY, VK_MSG_FACILITY_FAILED,
  16.                VK_MSG_FACILITY_STARTED };
  17.  
  18. enum VkMsgActionType { VK_MSG_ACTION_OBSERVE, VK_MSG_ACTION_HANDLE,
  19.                VK_MSG_ACTION_HANDLE_SPECIFIC,
  20.                VK_MSG_ACTION_REPLY, VK_MSG_ACTION_FAIL,
  21.                VK_MSG_ACTION_START };
  22.  
  23. typedef Boolean (*VkMsgFacilityCallback)(
  24. #if NeedFunctionPrototypes
  25.   VkMsgFacility*    /* obj */,
  26.   void*            /* client_data */,
  27.   VkMsgFacilityReason    /* reason */,  
  28.   VkMsgMessage        /* msg_in */,
  29.   char*            /* op */,
  30.   int            /* argc */,
  31.   VkMsgArg*        /* argv */
  32. #endif
  33. );
  34.  
  35. typedef struct {
  36.   VkMsgMessage pendingMessage;
  37.   VkMsgState pendingState;
  38.   Boolean pendingReceived;
  39.   Boolean expired;
  40. } ReplyWaitInfo;
  41.  
  42. class VkMsgFacility {
  43. public:
  44.   VkMsgFacility(Widget w, const char *ptid = NULL, const char *sessid = NULL);
  45.   ~VkMsgFacility();
  46.  
  47.   void connect(char *sessid = NULL);
  48.   VkMsgStatus joinFile(char *filepath);
  49.   void setCallback(VkMsgFacilityCallback callback, void *client_data);
  50.   char *getPtype() { return ptype; }
  51.  
  52.   VkMsgPattern registerPattern(char *op,
  53.                    VkMsgCategory category = VK_MSG_OBSERVE);
  54.   VkMsgPattern createPattern(char *op,
  55.                  VkMsgCategory category = VK_MSG_OBSERVE);
  56.   VkMsgStatus registerPattern(VkMsgPattern p)
  57.     { return VkMsgPatternRegister(p); }
  58.   VkMsgStatus unregisterPattern(VkMsgPattern p)
  59.     { return VkMsgPatternUnregister(p); }
  60.   VkMsgStatus destroyPattern(VkMsgPattern p)
  61.     { return VkMsgPatternDestroy(p); } 
  62.  
  63.   void sendNotice(char *op, int argc, VkMsgArg *argv);
  64.   void sendNotice(char *op);
  65.   void sendStringNotice(char *op ...);
  66.   void sendIntNotice(char *op ...);
  67.  
  68.   void sendFileNotice(char *op, char *file, int argc, VkMsgArg *argv);
  69.   void sendFileNotice(char *op, char *file);
  70.   void sendStringFileNotice(char *op, char *file ...);
  71.   void sendIntFileNotice(char *op, char *file ...);
  72.  
  73.   VkMsgMessage sendRequest(char *op, int argc, VkMsgArg *argv);
  74.   VkMsgMessage sendRequest(char *op);
  75.   VkMsgMessage sendSyncRequest(char *op, int argc, VkMsgArg *argv,
  76.                    int timeout = DEFAULT_SYNC_TIMEOUT);
  77.   VkMsgMessage sendSyncRequest(char *op, int timeout = DEFAULT_SYNC_TIMEOUT);
  78.  
  79.   VkMsgMessage sendFileRequest(char *op, char *file, int argc, VkMsgArg *argv);
  80.   VkMsgMessage sendFileRequest(char *op, char *file);
  81.   VkMsgMessage sendSyncFileRequest(char *op, char *file,
  82.                    int argc, VkMsgArg *argv,
  83.                    int timeout = DEFAULT_SYNC_TIMEOUT);
  84.   VkMsgMessage sendSyncFileRequest(char *op, char *file,
  85.                    int timeout = DEFAULT_SYNC_TIMEOUT);
  86.  
  87.   VkMsgMessage sendRequest(VkMsgMessage msg_out);
  88.  
  89.   void composeBegin();
  90.   void composeAdd(VkMsgArg *arg);
  91.   void composeAdd(char *val, VkMsgMode mode = VK_MSG_IN);
  92.   void composeAdd(int ival, VkMsgMode mode = VK_MSG_IN);
  93.   void composeAdd(unsigned char *val, int len, VkMsgMode mode = VK_MSG_IN);
  94.   VkMsgArg *composeList() { return compose; }
  95.   int composeNum() { return composeCount; }
  96.  
  97.   char *sessionID();
  98.   Atom sessionProperty() { return _sessionProperty; }
  99.  
  100.   void setDefaultSession(const char *sessid);
  101.   char *computeSGISession();
  102.  
  103. protected:
  104.   char *startPrivateSession();
  105.   char *getCaseSession(Boolean checkSelection = True);
  106.   char *getCaseProperty();
  107.   char *getDefaultSession();
  108.   void breakOutOfEventLoop();
  109.   ReplyWaitInfo *findReplyWaitInfo(VkMsgMessage msg);
  110.   int newReplyWaitInfo();
  111.   void popReplyWaitInfo();
  112.   char *getRootProperty(char *pname);
  113.  
  114.   virtual Boolean defaultCallback(VkMsgFacilityReason reason,
  115.                   VkMsgMessage msg_in,
  116.                   char *op, int argc, VkMsgArg *argv,
  117.                   Boolean *deleteMessage);
  118.   virtual VkMsgCallbackAction receiveReply(VkMsgMessage msg_in,
  119.                        VkMsgPattern pat);
  120.  
  121.   void connectToXt(Widget w);
  122.   void receiveMessage();
  123.   Boolean callCallback(VkMsgFacilityReason reason, VkMsgMessage msg_in,
  124.                char *op, int argc, VkMsgArg *argv);
  125.   char *makePathExplicit(char *path);
  126.   VkMsgScope messageScope();
  127.   Boolean waitForReply(VkMsgMessage msg, int timeout);
  128.  
  129.   static void waitTimeOut(XtPointer client_data, XtIntervalId *);
  130.   static void receive_message(XtPointer client_data, int *source,
  131.                   XtInputId *id);
  132.   static VkMsgCallbackAction receive_reply(VkMsgMessage msg_in,
  133.                        VkMsgPattern pat);
  134.  
  135.   VkMsgFacilityCallback callback;
  136.   void *callbackData;
  137.   VkMsgID msg;
  138.   VkMsgArg *compose;
  139.   int composeSize, composeCount;
  140.   char *sgi_session;
  141.   Atom _sessionProperty;
  142.   char *ptype;
  143.   char *sessionId;
  144.   int numReplyWait, sizeReplyWait;
  145.   ReplyWaitInfo *replyWaitInfo;
  146.   Boolean firstConnect;
  147.   Atom selectionAtom;
  148.   int defaultSyncTimeout;
  149. };
  150.  
  151. #endif
  152.